<?php
namespace App\Api\Autojs;

use PhalApi\Api;
use PhalApi\Exception\BadRequestException;

/**
 * 添加接口
 * @desc 提供盒马相关数据的增删改查接口
 */
class Xhs extends Api {
    public function getRules() {
        return array(
            'add' => array(),
            'addc' => array(),
            'fix' => array()
        );
    }

    /**
     * fix
     * @desc 处理hmsshuju表数据
     * @return array 操作结果
     * @exception 400 参数错误
     */
    public function fix()
    {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
        header('Access-Control-Allow-Headers: *');

        $where = array( 'int_price' => 0.01 );
        $existing = \PhalApi\DI()->notorm->hmsshuju->where($where)->fetchAll();
        if( $existing ){
            foreach( $existing as $value ){
                        // 提取价格中的数字部分（如¥35.8/罐提取35.8）
                preg_match('/(\d+\.?\d*)/', $value['vip'], $priceMatches);
                $priceNum = isset($priceMatches[1]) ? floatval($priceMatches[1]) : 0;
                $int_price = (float)sprintf('%.2f', $priceNum); // 直接保留两位小数并转换为浮点数
                if($int_price){
                    $int_price = number_format($int_price, 2, '.', ''); // 格式化为两位小数的字符串（无千位分隔符）
                    \PhalApi\DI()->notorm->hmsshuju->where('id', $value['id'])->update(array('int_price'=>$int_price ));
                }
            }
        }
        return count($existing);
    }





    /**
     * 添加/更新数据
     * @desc 处理hmsshuju表数据
     * @return array 操作结果
     * @exception 400 参数错误
     */
    public function add()
    {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
        header('Access-Control-Allow-Headers: *');

        $json = file_get_contents('php://input');
        if (empty($json)) {
            throw new BadRequestException('请求体不能为空');
        }
        $obj = json_decode($json, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            throw new BadRequestException('JSON格式错误: ' . json_last_error_msg());
        }        
        
        
        $obj['update_time'] = date('Y-m-d H:i:s');
        try {
            $where = [
                'title' => $obj['title'],
                'auther' => $obj['auther'],
            ];
            $existing = \PhalApi\DI()->notorm->auto_xhs->where($where)->fetchOne();
            if ($existing) {
                $existing['update_time'] = date('Y-m-d H:i:s', time());
                $obj['count'] = $existing['count'] + 1;

   
                \PhalApi\DI()->notorm->auto_xhs->where('id', $existing['id'])->update($obj);
                return ['code' => 1, 'msg' => '更新成功', 'data' => ['id' => $existing['id']]];
            }
            $obj['create_time'] = date('Y-m-d H:i:s');
            $id = \PhalApi\DI()->notorm->auto_xhs->insert($obj);
            return ['code' => 1, 'msg' => '创建成功', 'data' => ['id' => $id['id']]];
        } catch (\Exception $e) {
            throw new BadRequestException($e->getMessage());
        }
    }


    /**
     * 添加/更新数据
     * @desc 处理hmsshuju表数据
     * @return array 操作结果
     * @exception 400 参数错误
     */
    public function addc()
    {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
        header('Access-Control-Allow-Headers: *');

        $json = file_get_contents('php://input');
        if (empty($json)) {
            throw new BadRequestException('请求体不能为空');
        }
        $obj = json_decode($json, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            throw new BadRequestException('JSON格式错误: ' . json_last_error_msg());
        }        
        
        /**
         * 将 $obj['comment'] 按 '｜' 分割成数组
         * 
         * 步骤说明：
         * 1. 判断 $obj['comment'] 是否存在且为字符串
         * 2. 使用 explode('｜', $obj['comment']) 进行分割
         * 3. 结果赋值给 $arrlist
         */
        $arrlist = [];
        if (isset($obj['comment']) && is_string($obj['comment'])) {
            $arrlist = explode('|', $obj['comment']);
        }

        $obj['nickname'] = $arrlist[0];
        /**
         * 从 $obj['comment'] 中提取内容作为 $obj['content']
         * 
         * 详细说明与步骤（支持多个“回复”，以最后一个为准）：
         * 1. 确认 $obj['comment'] 存在且为字符串。
         * 2. 查找第一个 '|' 的位置，作为起始点。
         * 3. 从第一个 '|' 后面开始，查找所有 '回复' 的位置，取最后一个 '回复'。
         * 4. 截取第一个 '|' 后到最后一个 '回复' 之间的内容，去除首尾空格，赋值给 $obj['content']。
         * 5. 如果未找到 '|' 或 '回复'，则 $obj['content'] 设为空字符串。
         * 6. 新增规则：如果得到的内容中有“作者|”，则去除“作者|”。
         * 
         * 测试用例：
         * 1. $obj['comment'] = '嘟嘟|作者|回复  0x小宁-Jesse：没必了 一无所有了 昨天 17:24 广东 回复'
         *    处理后 $obj['content'] 应为 '作者|回复  0x小宁-Jesse：没必了 一无所有了 昨天 17:24 广东 '
         * 2. $obj['comment'] = '我和以太有个约会。|作者|洒洒水 好好玩 5天前 广东 回复|1'
         *    处理后 $obj['content'] 应为 '作者|洒洒水 好好玩 5天前 广东 '
         */
        $obj['content'] = '';
        if (isset($obj['comment']) && is_string($obj['comment'])) {
            $commentStr = $obj['comment'];
            $firstPipePos = strpos($commentStr, '|');
            if ($firstPipePos !== false) {
                // 从第一个'|'后面开始处理
                $afterPipe = substr($commentStr, $firstPipePos + 1);
                // 查找所有'回复'出现的位置
                $replyPositions = [];
                $offset = 0;
                while (($pos = strpos($afterPipe, '回复', $offset)) !== false) {
                    $replyPositions[] = $pos;
                    $offset = $pos + strlen('回复');
                }
                if (!empty($replyPositions)) {
                    // 取最后一个'回复'的位置
                    $lastReplyPos = end($replyPositions);
                    // 截取第一个'|'后到最后一个'回复'之间的内容
                    $content = substr($afterPipe, 0, $lastReplyPos);
                } else {
                    // 没有'回复'，则取'|'后所有内容
                    $content = $afterPipe;
                }
                $content = trim($content);
                // 新增：去除“作者|”前缀
                if (strpos($content, '作者|') === 0) {
                    $content = substr($content, strlen('作者|'));
                }
                $obj['content'] = $content;
            }
        }

        /**
         * 测试用例
         * 
         * 输入: $obj['comment'] = '我和以太有个约会。|作者|洒洒水 好好玩 5天前 广东 回复|1'
         * 处理后: $obj['content'] 应为 '作者|洒洒水 好好玩 5天前 广东 '
         */


        
        $obj['update_time'] = date('Y-m-d H:i:s');
        try {
            $where = [
                'page_id' => $obj['page_id'],
                'comment' => $obj['comment'],
            ];
            $existing = \PhalApi\DI()->notorm->auto_xhs_comment->where($where)->fetchOne();
            if ($existing) {
                $existing['update_time'] = date('Y-m-d H:i:s', time());
                $obj['count'] = $existing['count'] + 1;

   
                \PhalApi\DI()->notorm->auto_xhs_comment->where('id', $existing['id'])->update($obj);
                return ['code' => 1, 'msg' => '更新成功', 'data' => ['id' => $existing['id']]];
            }
            $obj['create_time'] = date('Y-m-d H:i:s');
            $id = \PhalApi\DI()->notorm->auto_xhs_comment->insert($obj);
            return ['code' => 1, 'msg' => '创建成功', 'data' => ['id' => $id['id']]];
        } catch (\Exception $e) {
            throw new BadRequestException($e->getMessage());
        }
    }


}